1. Technical Field
The present invention relates to storage subsystems, and more specifically, to systems and methods for optimizing execution of storage access commands.
2. Description of the Related Art
Solid-state storage subsystems are widely used to store various types of data. They are often used as an alternative to disk-based storage, particularly in portable electronic devices that often require a combination of large memory capacity and portability. One limitation of solid-state storage subsystems is the need to perform block erase operations when storing data within (programming) the non-volatile memory (“NVM”) array. Another limitation is the finite number of write-erase cycles associated with non-volatile memory storage arrays, whose non-volatile storage components can lose the ability to retain data stored thereon after as little as hundreds of thousands or millions of write/erase cycles. This may necessitate performing periodic wear leveling operations to distribute write-erase cycles evenly across memory blocks and/or periodic bad block management operations to identify and mark inoperative memory blocks. Consequently, a significant problem with solid-state storage subsystems is that their programming performance depends on whether block erase, wear leveling, and bad block management operations need to be performed in advance of programming the memory blocks. The resulting programming performance variance can be especially problematic when a storage subsystem is used for time-critical tasks such as backing up data during a power failure or brownout, caching data, programming data sets having a high priority, or executing time-critical non-standard storage access commands.